#!/bin/bash

# SCRIPT radios.sh
# Utilisation: "./radios.sh [adresse directe du flux radio]"
# Script proposant d'écouter des stations radio via mplayer
# Travail et idée originale de "Jotenakis"

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


#------------------------------------------------------------------------------#
# Initialisation des variables "utilisateur"                                   #
#------------------------------------------------------------------------------#
DB_FILENAME="radios.csv"; # nom du fichier local par défaut contenant les adresses des radios
DB_URL="http://ludomatic.fr/index.php/dlm/1/6"; # lien vers le fichier public des adresses de stations radio
SCRIPT_PAGEWEB="http://ubunteros.tuxfamily.org"/; # site du projet
SCRIPT_DATADIR="radios_rec";
SCRIPT_HISTORY="
0.8 (2007-02-27)jmrenouard<jmrenouard@gmail.com>
      - Revue des paramètres en ligne de commande

0.76 (2007-02-22)jmrenouard <jmrenouard@gmail.com>
      - Fusion avec l'enregistreur de flux
      - Correctif en sortie de script sur les couleurs du shell
      - Affichage radio diffusée et radio enregistrée

0.75 (2007-02-20) jmrenouard <jmrenouard@gmail.com>
      - Zapping complet pour tous les modes

0.74 (2007-02-19) jmrenouard <jmrenouard@gmail.com>
      - Utilisation de Xdialog si Xdialog est installé
      - Utilisation de cdialog si cdialog est installé
      - Zapping possible avec dialog

0.73d (2007-02-21) lexdu <lexdu@free.fr>
      - le zapping de radio (merci Jean-Marie RENOUARD ;) )
      - l'enregistrement daté et titré du flux
      - l'enregistrement d'un flux pendant l'écoute d'un autre
      - l'arrêt de l'enregistrement sans arrêter l'écoute
      - modification de l'affichage (affichage en bas de liste de la radio en cours d'écoute, si il y en a une et de la radio en cours d'enregistrement, si il y en a une)

0.73c (2007-02-18) lexdu <lexdu@free.fr>
      - Re-affichage de la liste des radios à l'interruption de l'écoute de la radio en cours

0.73b (2007-02-18) lexdu <lexdu@free.fr>
      - Affichage du nom de la station plutôt que de l'url du flux

0.73  (2007-02-18) Ludomatic <ludomatic@leonux.net>
      - Suite à la découverte de problèmes de droits lors de l'enregistrement du
        fichier des radios, déplacement de \"radios.csv\" vers le dossier .radios
        du dossier \$HOME.

0.72  (2007-02-17) Ludomatic <ludomatic@leonux.net>
      - Essai de correction d'un \"bug\" : fermeture intempestive du script lors
        de son exécution dans un terminal. Ajout d'une pause à la sortie du
        script si la variable d'environnement DEBUGME existe.

0.71  (2007-01-31) Balkoth
      - Légère optimisation du code
      - Téléchargement automatique du fichier des radios si il n'est pas trouvé
      (2007-01-31) Ludomatic <ludomatic@leonux.net>
      - Fonction demandant l'autorisation de télécharger le fichier des radios
      - Correction d'un bug empêchant la lecture de l'adresse par défaut (repéré
        par Balkoth!)

0.70  (2007-01-30) Ludomatic <ludomatic@leonux.net>
      Grosse modification structurelle pour cette version 0.7 : séparation
      entre la liste des adresses des radios et le 'moteur' de lecture.
      Le nom du fichier des radios est 'radios.csv' et sera cherché dans
      l'ordre aux emplacements suivants :
      - dossier courant du script 'radios.sh'
      - dossier de l'utilisateur exécutant le script

0.6d  (2007-01-30) Ludomatic <ludomatic@leonux.net>
      Ajout de 27 stations (!) grace à Mail1
      Merci à Fran pour la découverte de CanalB!

0.6c  (2007-01-29) Ludomatic <ludomatic@leonux.net>
      Correction de l'adresse du flux OuiFM (merci à Mail1)
      Ajout des stations RTL2 et W3 Blues Radio sur proposition de Fran

0.6b- Ludomatic <ludomatic@leonux.net> (22/11/2006)
      Correction d'un bug concernant le fond d'écran uni (merci à Léonux et
      Eupythal)
      Ajout de la fonction 'PlusBlancQueBlanc()' qui nettoie tout à la fermeture

0.6 - Ludomatic <ludomatic@leonux.net> (21/11/2006)
      Merci à Eupythal pour l'ajout des stations RTL et OuiFM, et ses idées
      mises en pratique :
      > Suppression des messages mplayer lors de la lecture
      > Rester dans une 'boucle' pour proposer continuellement les stations

0.5 - Ludomatic <ludomatic@leonux.net> (19/11/2006)
      Débugage des affichages colorés,
      Optimisation de quelques parties du code,
      Nettoyage du code.

0.4 - Zarer <????@gmail.com>
      Tests et ajout de stations radio

0.3 - Ludomatic <ludomatic@leonux.net>
      Quelques mises en Fonctions et création de Variables grace aux documents
      suivants :
      > http://www.c-sait.net/cours/scripts.php
      > http://www.linuxcommand.org/wss0120.php
      > http://www.arachnoid.com/linux/shell_programming.html

0.2 - Leonux <leonux@leonux.net>
      Refonte du script et publication sur le \"Guide de survie de l'ubuntiste
      débutant\".

0.1 - Jotenakis
      Idée et script original pour Suse Linux.
";


#------------------------------------------------------------------------------#
# Initialisation des variables internes "automatiques"                         #
#------------------------------------------------------------------------------#
NO_ARGS=0
NONE=0
FATAL=1
ERROR=2
WARN=3
INFO=4
DEBUG=5
ALL=6
DEBUG_MODE="$WARN"
SCRIPT_VERSION=$( echo $SCRIPT_HISTORY | cut -d " " -f1 ); # version courante
SCRIPT_NAME=$( basename $0 ); # nom du script courant
SCRIPT_PATH=$( dirname $0 ); # chemin vers le script courant
MPLAYER_PATH=$( which mplayer ); # emplacement de l'exécutable mplayer
MPLAYER="$MPLAYER_PATH -msglevel all=-1 "; # paramètres à fournir à mplayer
MENCODER_PATH=$( which mencoder ); # emplacement de l'exécutable mencoder
MENCODER="$MPLAYER_PATH "; # paramètres à fournir à mencoder
HOME_PATH=$HOME; # dossier de l'utilisateur
DATA_PATH="$HOME/$SCRIPT_DATADIR"; # dossier de travail de l'application
PID_FILE=/tmp/pid_mplayer_radio # fichier contenant le PID du mplayer lecteur de radio
PID_REC_FILE=/tmp/pid_rec_radio # fichier contenant le PID du mplayer enregistreur de radio
DIR_REC_RADIO="$HOME/$SCRIPT_DATADIR"; # répertoire par défaut d'enregistrement des radios

XDIALOG_PATH=$( which Xdialog ); #emplacement de l'executable dialog
CDIALOG_PATH=$( which dialog ); #emplacement de l'executable dialog
#VERSION PAR DEFAUT
DIALOG_PATH=$XDIALOG_PATH
FILE_CSV="$SCRIPT_PATH/$DB_FILENAME";
#------------------------------------------------------------------------------#
# Tests initiaux 				                               #
#------------------------------------------------------------------------------#

if [ -z "$MPLAYER_PATH" ]
then
    # MPlayer n'est pas installé ou ne peux pas être trouvé : on sort
    log ERROR "Vous devez installer le lecteur \"mplayer\" avant de continuer. \n";
    exit 1;
fi

if [ ! -d "$HOME/$SCRIPT_DATADIR" ]
then
    echo "$HOME/$SCRIPT_DATADIR n'existe pas, creons le!"
    mkdir -p "$HOME/$SCRIPT_DATADIR"
fi

if [ ! -d "$DATA_PATH" ]
then
    # Le dossier de travail du script n'existe pas, on le créé
    mkdir -p $DATA_PATH;
fi
#------------------------------------------------------------------------------#
# Fonction de log 				                               #
#------------------------------------------------------------------------------#
log()  {
	if [ "1" -gt "$#" ]; then
		return 0;
	fi
	level_s="\$$1"
	level=$(eval "echo $level_s")
	if [ "$DEBUG_MODE" -gt "$level" ]; then
		echo "`date +%d-%m-%Y-%l:%M:%S` $@"	
	fi
}
#------------------------------------------------------------------------------#
# Fonction d'aide 				                               #
#------------------------------------------------------------------------------#
afficheAide() {
      echo "Usage: $SCRIPT_NAME [url du flux radio|numéro_flux]";
      echo "Ce script permet d'écouter des radios en ligne en ne vous servant que de votre console. MPlayer sera exécuté en tâche de fond.";
      echo "La dernière version est disponible depuis le site $SCRIPT_PAGEWEB";
      echo "";
      echo "$SCRIPT_NAME                      	    Lance le menu de lecture";
      echo "$SCRIPT_NAME url_radio      	    Ecoute la radio à l'adresse 'url_radio'";
      echo "$SCRIPT_NAME --file|-f nom_fichier      Charge la liste du fichier 'nom_fichier'";
      echo "$SCRIPT_NAME --help|-h	            Aide et options disponibles.";
      echo "$SCRIPT_NAME --version|-v          	    Version courante et l'historique.";
      echo "";
      echo "Utilisation possible en mode non interactif :"
      echo "$SCRIPT_NAME url_radio      	    Ecoute la radio à l'adresse 'url_radio'";
      echo "$SCRIPT_NAME numéro_flux      	    Ecoute la radio à la position 'numéro_flux' dans la liste";
      echo "$SCRIPT_NAME numéro_flux -f nom_fichier Ecoute la radio à la position 'numéro_flux' dans la liste contenu dans el fichier 'nom_fichier'";
      echo "$SCRIPT_NAME -s   	    		    Arrete l'écoute de la radio'"
	
      exit 1;
}

#------------------------------------------------------------------------------#
# Fonction de version 				                               #
#------------------------------------------------------------------------------#
afficheVersion() {
      echo "$SCRIPT_NAME version $SCRIPT_VERSION :";
      echo "$SCRIPT_HISTORY";
      echo "Tapez $SCRIPT_NAME --help pour obtenir l'aide complète.";
      echo "";
      exit 1;
}

lancerModeInteractif() {
	exit 0;
}


#------------------------------------------------------------------------------#
# Fonction de la ligne de commande		                               #
#------------------------------------------------------------------------------#
LectureRadio () {
# cette fonction lance la lecture de la radio sélectionnée ou passée en argument
    REC_URL=$URL # on sauve l'URL des fois que l'utilisateur veuille l'enregistrer
    log INFO "Connexion à la radio : $RADIO";
    $MPLAYER $URL 1>/dev/null 2>/dev/null &
   # export RADIO URL
    sleep 2s
    TueLectureRadio;
    sleep 1s
    InitLectureRadio;
}

TueLectureRadio() {
    if [ -f "$PID_FILE" ]
    then
        kill -9 `cut -d';' -f1 $PID_FILE` 2>&1 1>/dev/null
    fi
    rm -f $PID_FILE
}

InitLectureRadio(){
    if [ -f "$PID_FILE" ]
    then
        #echo "Existing mplayer instance ? ?"
        rm -f $PID_FILE
    fi
    #echo `pidof mplayer` > $PID_FILE
    echo "$!;$RADIO;$URL" > $PID_FILE
}

lanceRadio() {
	log DEBUG "Parameter : $@"
	nodigits="$(echo $1 | sed 's/[[:digit:]]//g')"
          
        if [ -n $FILE_CSV ] # la variable $FILE_CSV n'est pas nulle et on a bien reçu un numéro de ligne
        then
		if [ -z "$nodigits" ] 
            	then
                    # on récupère la ligne correspondant à la station demandée
                    line=$(sed -n ${1}p $FILE_CSV)
                else
		    line=$(grep -m 1 -i $1 $FILE_CSV)
		fi
		
		if [ -n "$line" ]
                then
                        # on a un choix valide, on mémorise l'adresse (partie située après le point-virgule)
                        URL=$( echo $line | cut -d ";" -f2 );
                        # on récupère le nom de la radio
                        RADIO=$( echo $line | cut -d ";" -f1 );
                else
                        # le choix est hors limites !
                        log WARN "Choix invalide.";
                fi
	fi
	log DEBUG "RADIO : $RADIO"
	log DEBUG "URL : $URL"
	if [ -n "$URL" ]; then
        	LectureRadio; # on écoute la radio choisie ou passée en argument
    	fi

	exit 0
}

stopRadio() {
    TueLectureRadio;
    exit 0
}
#------------------------------------------------------------------------------#
# Gestion des paramètres			                               #
#------------------------------------------------------------------------------#
if [ $# -eq "$NO_ARGS" ]  # Script invoked with no command-line args?
then
  lancerModeInteractif;
fi  

TEMP=`getopt -o Vl:scf: --long verbose-long,courant-long,lecture-long:,stop-long,fichier-long: -- "$@"`

if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi

# Note the quotes around $TEMP': they are essential!
eval set -- "$TEMP"

while true ; do
	log DEBUG "gestion de $@"
        case "$1" in
                -V|--verbose)
			DEBUG_MODE=$ALL;
			shift
			;;
		-f|--fichier-long)
                        log DEBUG "Option fichier, argument $2" 
            		FILE_CSV="$2";
			shift 2 
			;;
		
		-c|--courant)
			shift
			if [ -f "$PID_FILE" ]; then
				echo -e "RADIO \t: `cut -d';' -f2 $PID_FILE`";
				echo -e "URL \t: `cut -d';' -f3 $PID_FILE`";
				exit 0;
			fi
			;;
                
		-l|--lecture-long) 
			log DEBUG "Option lecture : $2" 
			LANCE_RADIO="1"
			NUM_RADIO=$2
			shift 2
			;;

                -s|--stop-long) 
			log DEBUG "Option stop" 
			shift 
			STOP_RADIO="1";
			;;

                --) shift ; 
			break ;;
                *) echo "Internal error!" ; exit 1 ;;
        esac
done

if [ -n "$LANCE_RADIO" ]; then 
	lanceRadio $NUM_RADIO
	LANCE_RADIO=""
	NUM_RADIO=""
fi
if [ -n "$STOP_RADIO" ]; then 
	stopRadio 
fi

exit 0;















if [ -n "$1" ]
then
    # l'utilisateur a envoyé un paramètre, si il n'est pas reconnu comme une des options alors le considérer comme une adresse à ouvrir ("./radios.sh url_du_flux")
    case "$1" in
    --help|-h ) # option d'aide
	afficheAide;    	
    ;;
    --version|-v ) # option de version
    	afficheVersion;
    ;;

    --file|-f ) # paramètre : fichier des adresses radios à charger
      PARAM_FILENAME="$2";
    ;;
    --text|-t )
      DIALOG_PATH=""; #Pas de dialog si fichier
    ;;
    --dialog|-d )
      DIALOG_PATH=$CDIALOG_PATH; #Pas de xdialog mais cdialog
    ;;
    * ) # pas une option, considérer comme une url de flux radio et passer à la suite
      URL=$1
    ;;
    esac
fi


#------------------------------------------------------------------------------#
# Déclaration des Fonctions                                                    #
#------------------------------------------------------------------------------#

MrPropre () {
# cette fonction permet de ré-initialiser les couleurs du terminal
    tput sgr0; # supprime les couleurs
}
PlusBlancQueBlanc () {
# cette fonction nettoie tout le terminal
    if [ $DEBUGME ]; then
        read -n 1;
    else
        MrPropre;
        clear;
    fi
}

AfficheTextStations() {
# cette fonction permet d'afficher la liste des stations
    if [ -e "$FILE_CSV" ]
    then
        echo -e '\E[36;40m'; # hop, on change de couleur
        cat -n $DB_FILENAME | cut -d ";" -f1;
        MrPropre; # supprime les couleurs
    else
        echo "Aucune liste de radios n'a été trouvée!";
    fi
}

AfficheEnrStation() {
    tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
    trap "rm -f $tempfile" 0 1 2 5 15

    tempfile2=`tempfile 2>/dev/null` || tempfile2=/tmp/test$$
    trap "rm -f $tempfile2" 0 1 2 5 15

    #--ok-label \"Ecouter\" --cancel-label \"Stopper\"
    $DIALOG_PATH --clear  --title "RADIO BOX" --yesno "Enregistrer cette radio ?" 5 30 2> $tempfile

    retval=$?
    return $retval
}


AfficheDialogStations() {
    if [ "$REC_RADIO" != "$RADIO" ]
    then
        AfficheEnrStation;
        if [ "0" -eq "$?" ]
        then
            echo "Recording $RADIO"
            NUMSTATION="r"
            return 0;
        fi
    fi
    AfficheDialogListStations;
}

AfficheDialogListStations() {
    tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
    trap "rm -f $tempfile" 0 1 2 5 15

    tempfile2=`tempfile 2>/dev/null` || tempfile2=/tmp/test$$
    trap "rm -f $tempfile2" 0 1 2 5 15

    #--ok-label \"Ecouter\" --cancel-label \"Stopper\"
    CMD_DIALOG="$DIALOG_PATH --clear  --title \"RADIO BOX\" --menu \"Bienvenue sur $SCRIPT_NAME (v$SCRIPT_VERSION)\\\\nLecteur de stations radio sur internet via mplayer \n"
    if [ -n "$RADIO" ] &&  [ -f "$PID_FILE" ]
    then
        CMD_DIALOG="$CMD_DIALOG\\\\nRadio diffusée : $RADIO"
    else
        CMD_DIALOG="$CMD_DIALOG\\\\nAucune radio diffusée"
    fi
        if [ -n "$REC_RADIO" ] &&  [ -f "$PID_REC_FILE" ]
    then
        CMD_DIALOG="$CMD_DIALOG\\\\nRadio en cours d'enregistrement : $REC_RADIO"
    else
        CMD_DIALOG="$CMD_DIALOG\\\\nAucune radio en cours d'enregistrement"
    fi
    CMD_DIALOG="$CMD_DIALOG\\\\n\\\\nChoisissez votre radio :\" 40 70 20 \\"
        echo -e $CMD_DIALOG > $tempfile2
        cut -d ";" -f1 $FILE_CSV | cat -n | sed -e "s/^ */\"/g" | sed -e "s/\t/\" \"/g"| sed -e "s/$/\" \\\\/g"  >> $tempfile2
    echo "2> $tempfile" >> $tempfile2

    source $tempfile2

    retval=$?

    case $retval in
        0)
            NUMSTATION=`cat $tempfile`;;
        1)
            NUMSTATION="q";;
        255)
            NUMSTATION="q";;
    esac
}

AfficheStations () {
    NUMSTATION="";
    if [ -n "$DIALOG_PATH" ]
    then
        AfficheDialogStations;
    else
        AfficheTextStations; # on affiche la liste des stations
    fi
}

TelechargeFichier () {
# cette fonction gère le téléchargement du fichier des radios

    USER_ANSWER="?";
    while [ "x$USER_ANSWER" != "xn" -a "x$USER_ANSWER" != "xN" -a "x$USER_ANSWER" != "xo" -a "x$USER_ANSWER" != "xO" ] ; do
        echo -n "Voulez-vous lancer le téléchargement automatique du fichier ? [o/n] "
        read -n 1 USER_ANSWER
        echo "";
    done
    if [ "x$USER_ANSWER" == "xo" -o "x$USER_ANSWER" == "xO" ] ; then
        wget --user-agent="$SCRIPT_NAME" -nv "$DB_URL" -O "$DATA_PATH/$DB_FILENAME";
    fi
    if [ -e "$DATA_PATH/$DB_FILENAME" ] ; then
        echo "Le fichier a été récupéré avec succès!";
    else
        echo "Le fichier n'a pas pu être récupéré, vous pouvez vous renseigner sur $SCRIPT_PAGEWEB.";
    fi
}


EnregitreRadio () {
# cette fonction enregistre la radio sélectionnée ou passée en argument
    REC_RADIO=$RADIO;
    echo "Demande d'enregistrement de la radio : $REC_RADIO";
    $MPLAYER -dumpstream -dumpfile $DIR_REC_RADIO/`date +%F_%H:%M:%S`_"$REC_RADIO" -nocache $REC_URL &
    sleep 2s
    TueEnregRadio;
    sleep 1s
    InitEnregRadio;
}

TueEnregRadio() {
    if [ -f "$PID_REC_FILE" ]
    then
        echo "Arrêt d'enregistrement demandé !";
        sleep 2s
        kill -9 `cat $PID_REC_FILE` 2>&1 1>/dev/null
    fi
    rm -f $PID_REC_FILE
}

InitEnregRadio(){
    if [ -f "$PID_REC_FILE" ]
    then
        #echo "Existing mplayer instance ? ?"
        rm -f $PID_REC_FILE
    fi
    #echo `pidof mplayer` > $PID_REC_FILE
    echo $! > $PID_REC_FILE
}



#------------------------------------------------------------------------------#
# Affichage de la liste et lecture du choix si une URL n'est pas fournie       #
#------------------------------------------------------------------------------#

trap "PlusBlancQueBlanc" 0; # commande qui exécute la fonction 'PlusBlancQueBlanc()' lors de la sortie du programme (réception du signal '0')

clear;
echo "Bienvenue sur $SCRIPT_NAME (v$SCRIPT_VERSION), le lecteur de stations radio sur internet via mplayer.";
TueLectureRadio;
TueEnregRadio;

if [ $PARAM_FILENAME ]
then
    # un fichier de flux a été forcé en parametre !
    if [ -e "$PARAM_FILENAME" ]
    then
        # un fichier de flux est fourni en parametre, le charger par défaut
        FILE_CSV=$PARAM_FILENAME;
    else
        # aïe, le fichier demandé n'a été trouvé... on quitte de suite
        echo "Le fichier spécifié n'a pas été trouvé!";
        echo "Vous pouvez directement spécifier une adresse de radio en paramètre";
        echo "ou obtenir une liste prédéfinie à l'adresse suivante :";
        echo "$DB_URL";
        echo "";
        echo "Tapez $SCRIPT_NAME --help pour obtenir l'aide complète.";
        echo "";
        exit 1;
    fi
else
    if [ -z $URL ]
    then
        # pas de fichier en paramètre ni d'url à charger : chercher le fichier dans le dossier courant
        if [ -e "$SCRIPT_PATH/$DB_FILENAME" ]
        then
            # un fichier de flux existe par défaut dans le dossier courant
            FILE_CSV="$SCRIPT_PATH/$DB_FILENAME";
        else
            if [ -e "$DATA_PATH/$DB_FILENAME" ]
            then
                # un fichier de flux existe par défaut dans le dossier de l'utilisateur
                FILE_CSV="$DATA_PATH/$DB_FILENAME";
            else
                # aucun fichier n'a été trouvé...
                echo "Aucune liste de radios n'a été trouvée!";
                # on télécharge le fichier par défaut
                TelechargeFichier;
                if [ -e "$DATA_PATH/$DB_FILENAME" ] ; then
                    FILE_CSV="$DATA_PATH/$DB_FILENAME";
                else
                    echo "Aucune adresse n'a été fournie et aucun fichier d'adresses n'a été trouvé.";
                    echo "";
                    exit 1;
                fi
            fi
        fi
    fi
fi
# à ce stade, on dispose d'une URL ($URL) ou d'un fichier d'URLs ($FILE_CSV)

while true; do # on boucle

    AfficheStations; # on affiche la liste des stations
    if [ -f "$PID_FILE" ]
    then
        echo -en '\E[37;40m'; # oui, on aime les couleurs par ici :)
        echo -en "\nLa radio en cours d'écoute est : ";
        echo -en '\E[36;40m'; # hop, on change de couleur pour le nom de la radio ;)
        echo -e "$RADIO"
    fi
    if [ -f "$PID_REC_FILE" ]
    then
        echo -en '\E[37;40m'; # oui, on aime les couleurs par ici :)
        echo -en "\nUne radio est en cours d'enregistrement :"
        echo -en '\E[36;40m'; # hop, on change de couleur pour le nom de la radio ;)
        echo -e "$REC_RADIO"
    fi
        # bon, si on arrive à cette ligne c'est que mplayer est installé et que nous disposons d'une adresse considérée comme valide : on le lit ce flux?
    if [ -z "$DIALOG_PATH" ]
    then
        echo -e '\E[37;40m'; # on change de couleur et on efface l'écran pour uniformiser le fond (merci à Leonux pour le screenshot ;)
        echo "Faites votre choix :"
        echo "\"q\" pour quitter à tout moment"
        echo "\"l\" pour afficher la liste"
        echo "\"r\" pour enregistrer la radio en cours d'écoute"
        echo "\"qr\" pour quitter l'enregistrement de la radio"
        echo -e '\E[33;40m'; # on change à nouveau de couleur pour demander d'entrer un choix
        echo -en 'Quelle radio écouter [defaut : 1] ?> ';
        read NUMSTATION; # on enregistre le choix saisi
        MrPropre; # supprime les couleurs
    fi

    if [ -z "$NUMSTATION" ]
    then
        # le choix par défaut est appliqué si la réponse est vide
        NUMSTATION="1";
    fi
    case $NUMSTATION in
        "q"|"Q" ) # l'utilisateur a demandé de sortir
            echo "Sortie sur demande utilisateur"
            TueLectureRadio;
            TueEnregRadio;
            MrPropre; # supprime les couleurs
            break;
        ;;
        "l"|"L" ) # l'utilisateur souhaite voir la liste des stations
            AfficheStations;
        ;;
        "r"|"R" ) # l'utilisateur souhaite enregistrer la radio en cours
            EnregitreRadio;
        ;;
        "qr"|"QR" ) # l'utilisateur souhaite arrêter l'enregistrement en cours
            TueEnregRadio;
        ;;
        * ) # un numéro a été saisi ?
            nodigits="$(echo $NUMSTATION | sed 's/[[:digit:]]//g')"
            if [ -z "$nodigits" ] ;
            then
                if [ -n $FILE_CSV ] # la variable $FILE_CSV n'est pas nulle et on a bien reçu un numéro de ligne
                then
                    # on récupère la ligne correspondant à la station demandée
                    line=$(sed -n ${NUMSTATION}p $FILE_CSV)
                    if [ -n "$line" ]
                    then
                        # on a un choix valide, on mémorise l'adresse (partie située après le point-virgule)
                        URL=$( echo $line | cut -d ";" -f2 );
                        # on récupère le nom de la radio
                        RADIO=$( echo $line | cut -d ";" -f1 );
                    else
                        # le choix est hors limites !
                        echo "Veuillez choisir un numéro valide dans la liste (laisser vide pour la radio par défaut ou tapez \"l\")";
                    fi
                fi
            else
                # le choix est invalide !
                echo "Veuillez choisir un numéro valide dans la liste (laisser vide pour la radio par défaut ou tapez \"l\")";
            fi
        ;;
    esac;

    if [ -n "$URL" ]; then
        LectureRadio; # on écoute la radio choisie ou passée en argument
    fi

    URL="";
done

exit $?; # On quitte avec le code de sortie de la dernière comande (mplayer). That's all folks!
